// export出去的不是对象 export是批量导出的意思
// import './01export用法/b.js'
// import './01命名导出与默认导出的区别/b.js';

// import * as x from './01关于export from'
// console.log('x:',x);
/*
Module {__esModule: true, …}
a: 1
b: 2
d: "d"
e: "e"
Symbol(Symbol.toStringTag): "Module"
__esModule: true
get a: ƒ ()
get b: ƒ ()
get d: ƒ ()
get e: ƒ ()
__proto__: Object
*/





// import './02import/a.js'





// import x from './es6和commonJS混用/00es6 import和module.exports';
// import x from './es6和commonJS混用/01es6 import和exports.x=y';
import x from './es6和commonJS混用/02commonJS require和es6 export';


//TODO 在浏览器中使用es6module <script src='./a.js' type="module"></script>
//TODO --experimental-modules

//require
// 是动态的(相当于就是调用readFile api) 可以在代码块中动态导入 它是运行时加载
// 模块输出的基本值是值的拷贝

//import
// 是静态的 是编译时加载 且不可在代码块中导入
// 模块输出的基本值是值的引用
/*if(true){
  require('./a');

  // import a from './a'; //SyntaxError: D:\x\node_tutorial\5.es6module\src\index.js: 'import' and 'export' may only appear at the top level (6:2)
}*/

/** import 会变量提升(声明和提升)，但不能重复声明*/
/*console.log(obj);
import * as obj from './useE';
// var obj = 111; //←会报错 SyntaxError: D:\x\node_tutorial\5.es6module\src\index.js: Identifier 'obj' has already been declared (56:4)*/


/** 实验性语法 import() ← 依赖@babel/plugin-syntax-dynamic-import插件*/
// import()返回一个promise
if(true){
  //↓默认会将`./e`对应的那个文件打包成一个叫1.bundle.js的文件(数字会随着import()的文件数往上磊)
  //想要自定义名字的话可以使用魔术字符串↓ 这样就会打包成video.bundle.js
  /*import(/!* webpackChunkName: '02异步import/es6导出' *!/'./02异步import/es6导出').then(data => {
    console.log(data);
    /!*
      Module {default: {…}, __esModule: true, Symbol(Symbol.toStringTag): "Module"}
      a: 1
      b: 2
      default:
        a: 1
        b: 2
        __proto__: Object
      Symbol(Symbol.toStringTag): "Module"
      __esModule: true
      get a: ƒ ()
      get b: ƒ ()
      __proto__: Object
    *!/
  });*/

  import('./02异步import/commonJS导出').then(data=>{
    console.log(data);
    /** 和commonJS require 引入 同commonJS的导出不同, 即使你引入的模块是commonJS导出的, 也会作为es6模块导出(有一个default属性,里面存放着所有导出属性)
      Module {default: {…}, __esModule: true, …}
      default:
        x: 1
        y: 2
        z: 3
        __proto__: Object
      x: (...)
      y: (...)
      z: (...)
      Symbol(Symbol.toStringTag): "Module"
      __esModule: true
      get x: ƒ ()
      get y: ƒ ()
      get z: ƒ ()
    */
  })
}
console.log('-------会在上面的动态import之前打印');
